package com.cskaoyan.javase.oop3._2inner._2static._0introduction;

/**
 * 静态内部类,也是一个定义在成员位置的内部类,和成员内部类的唯一区别在于,它有static关键字修饰它,语法:
 *      //外围（普通）类
 *      [访问权限修饰符] class EnclosedClazz{
 *          [访问权限修饰符] static class NestedClazz{
 *              }
 *      }
 * 静态内部类的特点:
 * 依然主要从以下几个角度分析：
 *      1.访问权限修饰符
 *          四种访问级别皆可用
 *          但是一般都是私有的
 *
 *      2.成员特点
 *          静态内部类和外围类本质上是两个独立的类
 *          静态内部类之所以要在外围类的内部, 只不过是为了隐藏和保护自身罢了
 *          所以静态内部类就是一个独立的类,就是一个正常的类
 *          它的成员特点和普通类完全一致,没有任何差别
 *          它的创建对象与使用,也和外围类没有关系,不存在持有引用.
 *
 *      3.继承和实现
 *          可以继承,可以实现
 *          但是要注意如果继承内部类时,只能继承静态内部类,不能继承成员内部类
 *
 * @since 11:22
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class EnclosedClazz {

    static class A {
    }

    // 定义静态内部类
    private static class NestedClazz extends A {
        int a;
        private int b = 20;
        static int c = 30;
        static final int D = 40;

        public void test() {
        }

        public static void testStatic() {
        }

        public NestedClazz() {
        }

        public NestedClazz(int a, int b) {
            this.a = a;
            this.b = b;
        }

        static {
        }

        {
        }
    }
}